The short answer: yes -- you don't even need the 'cast'.
Long answer: a derived class is a specialized version of the base class ('Derived is-a-kind-of-a Base'). The upward conversion is perfectly safe, and happens all the time (a ptr to a Derived is in fact pointing to a [specialized version of a] Base):
void f(Base* base_ptr);
void g(Derived* derived_ptr) { f(derived_ptr); } //perfectly safe; no cast
(note that the answer to this question assumes we're talking about 'public' derivation; see below on 'private/protected' inheritance for 'the other kind').